Действие | action

Тип функций action (действие) изменяет состояние игры. Действия не могут входить в состав других действий, фактов или выражений, за исключением условных конструкций. На этапе парсинга определяется необходимое действие и подготавливаются его аргументы. Выполнение действий происходит после однозначного разбора строки.

Примеры действий:

покрась стены в зелёный цвет
возьми 3 рубля

Пример функции действия:

action (иди _act*Пф, location _напр*Ап)
{
  -- check --
  if(actor.loc == _напр) fail, "ты уже здесь"
  if(нельзя_пройти) fail, "туда нет прохода"
  Ok
  -- execute --
  goto напр
}

Секции в действиях

В действиях допускаются секции: parsing (парсинг) check (проверка) execute (выполнение) Пример:

action (Arg1, .. ArgN)
{
  // общий код
  -- parsing --
  // код парсера
  -- check --
  // код проверки
  -- execute --
  // код выполнения
}

Секция parsing (парсинг)

Секция универсальна для всех типов функций. Смотрите описание в разделе Парсерные функции.

Секция check (проверка)

В этой секции мы должны проверить физическую возможность выполнения команды. Есть ли у нас все предметы, названные в команде, соблюдены ли условия, необходимые для начала выполнения действия и т.п. Если действие невозможно, секция должна вернуть ошибку. Здесь имеет значение комментарий ошибки и её вес. В случае когда все возможные комбинации аргументов закончились ошибкой, комментарий ошибки с наибольшим весом будет показан игроку как реакция на его команду.

Секция execute (выполнение)

В секции execute (выполнение) описывается действие, соответствующее команде. Здесь можно изменить состояние игры, вывести текст с описанием произошедшего события и т. д.

Смотрите также

System_GetState, System states, System state value class


to do:
Проверить корректность.
Добавить примеры.
Дополнить.